package com.lifeng.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * Created by lifeng on 2018/12/13.
 * 配置 交换机与队列的绑定关系，程序中可以不配
 * 在admin页面配置
 */
@Configuration
public class ExchangeConfig {

    /** fanout交换机 分发到所有队列*/
    @Bean
    public FanoutExchange fanoutExchange() {
        //return new FanoutExchange("fanoutExchange",true,false);//可以配置一些交换机的属性
        return new FanoutExchange("fanoutex");//配置广播路由器
    }
    //将队列绑定到交换机上
    @Bean
    public Binding bindingExchangeA(@Qualifier("hello1") Queue queueA, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(queueA).to(fanoutExchange);
    }

    @Bean(name = "hello1")
    public Queue hello1() {
        //创建此队列的好处就是自定义队列的属性
        /**参数1:队列名称
         参数2:是否持久化
         参数3:exclusive=true:首次申明的connection连接下可见; exclusive=false：所有connection连接下都可见
         参数4:是否自动删除，当已经没有消费者时，服务器是否可以删除
         */
        return new Queue("hello1",true,false,false);
    }

    @Bean(name = "hello2")
    public Queue hello2() {
        //创建此队列的好处就是自定义队列的属性
        /**参数1:队列名称
         参数2:是否持久化
         参数3:exclusive=true:首次申明的connection连接下可见; exclusive=false：所有connection连接下都可见
         参数4:是否自动删除，当已经没有消费者时，服务器是否可以删除
         */
        return new Queue("hello2",true,false,false);
    }
    //将队列绑定到交换机上
    @Bean
    public Binding bindingExchangeB(@Qualifier("hello2") Queue queueB, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(queueB).to(fanoutExchange);
    }
}
